package Reflex.cons;

import Reflex.cons.Cat;
import org.junit.Test;

import java.lang.reflect.Constructor;

public class ConstructorTest {
    @Test
    public void ConstructorTest(){
        Class catClass= Cat.class;
        Constructor[] constructors1=catClass.getConstructors();//只能拿到pubilc修饰的构造器
        //很少用catClass.getConstructors();方法，不够强大只能拿pubilc修饰的构造器

        //数组加点for直接遍历
        for (Constructor constructor : constructors1) {
            System.out.println(constructor.getName());
            System.out.println(constructor.getParameterCount());
        }

        Constructor[] constructors2=catClass.getDeclaredConstructors();//拿到所有
    }

    @Test
    public void ConstructorTest2() throws Exception {
        Class catClass1=Cat.class;
        Class catClass2=Cat.class;

        Constructor cat1 =catClass1.getConstructor();//只能拿到pubilc修饰的构造器
        Constructor cat2=catClass2.getDeclaredConstructor(String.class,int.class);
        System.out.println(cat1.getName()+"-------"+cat1.getParameterCount());
        System.out.println(cat2.getName()+"-------"+cat2.getParameterCount());
        //无参数构造器执行的

        Cat cat=(Cat)cat1.newInstance();//默认返回objec类型，要强转,进行这个构造器里面所有方法
        System.out.println(cat);
        cat2.setAccessible(true);//禁止检查访问权限
        Cat catt=(Cat)cat2.newInstance("范钦昱",12);

        System.out.println(catt);
        //万一访问类型是private，无法使用newInstance，要使用setAccessible


    }
}
